//
//  HMTabBar.swift
//  Weibo
//
//  Created by Apple on 2017/7/21.
//  Copyright © 2017年 KY. All rights reserved.
//

import UIKit

//  必须要继承基协议，否则无法使用weak关键字，修饰代理对象，防止产生循环引用
protocol HMTabBarDelegate: NSObjectProtocol {
    //  点击撰写按钮操作
    func clickComposeButtonOperation()
}

//  自定义tabbar
class HMTabBar: UITabBar {

    //  加号按钮执行的闭包
    var callBack: (()->())?
    //  设置代理
    weak var hmDelegate: HMTabBarDelegate?
    
    //  MARK:   --懒加载控件
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: .highlighted)
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        //  添加按钮点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        
        //  设置大小自适应
        button.sizeToFit()
        return button
    }()
    //  手写代码创建对象
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    //  加载xib或者sb的时候会调用这个方法
    required init?(coder aDecoder: NSCoder) {
//        //  不支持xib、sb，如果使用方不知道会有错误提示，oc没有
//        fatalError("init(coder:) has not been implemented")

        //  实现xib的写法
        super.init(coder: aDecoder)
        setupUI()
        
    }
    
    //  设置UI相关操作
    private func setupUI() {
        //  设置背景图片，解决push阴影效果
        backgroundImage = UIImage(named: "tabbar_background")
        //  添加子控件
        addSubview(composeButton)
    }
    
    //  MARK:   --点击事件
//    @objc 表示使用oc的方式基于运行时动态派发消息的机制调用这个方法
    @objc private func composeButtonAction() {
        //  执行闭包
        callBack?()
        //  代理对象执行代理方法
        hmDelegate?.clickComposeButtonOperation()
    }
    
    //  调整子控件frame
    override func layoutSubviews() {
        super.layoutSubviews()
        composeButton.centerX = width * 0.5
        composeButton.centerY = height * 0.5
        
        //  每项按钮的宽度
        let buttonWidth = width / 5
        //  记录当前系统按钮的索引
        var index = 0
        //  遍历子视图获取系统按钮
        for subView in subviews {
            if subView.isKind(of: NSClassFromString("UITabBarButton")!) {
                //  表示是系统UITabBarButton按钮
                subView.width = buttonWidth
                subView.x = CGFloat(index) * buttonWidth
                index += 1
                if index == 2 {
                    //  如果是第二个按钮的索引，让其x做加上一个按钮的宽度
                    index += 1
                }
            }
        }
        
        
    }
    
    

}
